package py.com.erpone.session.dm;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.ejb.LocalBean;
import javax.ejb.Stateful;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;

import py.com.erpone.entity.dm.Marca;
import py.com.erpone.entity.dm.Pais;


@Stateful 
@Named   // para tener acceso al objeto
@LocalBean // Designates that a session bean exposes a no-interface view. 
@ConversationScoped // para que mantenga la conversacion cuando se inicia. (solamente en stateful)
public class PaisBean {

	@PersistenceContext(type=PersistenceContextType.EXTENDED) // detecta el nombre del config del persistence. 												  // (en este caso sin parametro por que hay solo un persistence unit)
	private EntityManager em;
	
	@Inject // para que instancie una clase , para usar sus elementos.
	private Conversation conversation;
	
	private Pais pais;
	
	
	public PaisBean(){
		
	}


	public Pais getPais() {
		return pais;
	}
	


	public void setPais(Pais pais) {
		this.pais = pais;
	}
	
	
	
	public void iniciar(){
		if(conversation.isTransient())
			conversation.begin();
		pais=new Pais();
		
	}
	
	public void iniciar(Pais pais){
		if(conversation.isTransient())
			conversation.begin();
		this.pais=em.find(Pais.class, pais.getId());
	
	}
	//Método que convierte en mayúscula la primera letra de cada palabra, se invoca al momento de guardar.
   public String upperscaseEveryFirstLetter(String str){   
	      StringBuffer stringbf = new StringBuffer();
	      Matcher m = Pattern.compile("([a-z])([a-z]*)",
	      Pattern.CASE_INSENSITIVE).matcher(str);
	      while (m.find()) {
	         m.appendReplacement(stringbf, 
	         m.group(1).toUpperCase() + m.group(2).toLowerCase());
	      }
	      return stringbf.toString();
   }
	
	public void guardar(){
		if(pais.getId()==null){
			pais.setNombre(upperscaseEveryFirstLetter(pais.getNombre()));
			em.persist(pais);
		}else{
			pais.setNombre(upperscaseEveryFirstLetter(pais.getNombre()));
			em.merge(pais);
		}if(!conversation.isTransient())
			conversation.end();
	}
	
	public void eliminar(Pais pais){
		em.remove(em.merge(pais));
		if(!conversation.isTransient())
			conversation.end();
	
	}
	
	public String cancelar(){
		if(!conversation.isTransient())
			conversation.end();
		return "/dm/paises.xhtml";
	}

	
	
}
